/**************************************************************************** 
 * Meta，一个轻量级的静态分区Hypervisor 
 *
 * 版权(c) , 2022-
 *
 * 作者:
 *      Tupelo Shen <shenwanjiang2013@163.com>
 *
 * Meta是一个自由软件，你可以在遵循GNU GPLv2协议的条件下，重新修改并发布它。
 *
 ***************************************************************************/

#ifndef __FENCES_ARCH_H__
#define __FENCES_ARCH_H__

#include <meta.h>

#define DMB(shdmn) asm volatile("dmb " XSTR(shdmn) "\n\t" ::: "memory")

#define DSB(shdmn) asm volatile("dsb " XSTR(shdmn) "\n\t" ::: "memory")

#define ISB() asm volatile("isb\n\t" ::: "memory")

static inline void fence_ord_write()
{
    DMB(ishst);
}

static inline void fence_ord_read()
{
    DMB(ishld);
}

static inline void fence_ord()
{
    DMB(ish);
}

static inline void fence_sync_write()
{
    DSB(ishst);
}

static inline void fence_sync_read()
{
    DSB(ishld);
}

static inline void fence_sync()
{
    DSB(ish);
}

#endif /* __FENCES_ARCH_H__ */
